前幾篇的 MVVM 簡介有提到,其中一種資料來源是本地資料庫。只要有關於資料庫,資料庫的設計就很重要,他會間接地影響到程式的 debug 和執行速度等。所以一個好的資料庫就很重要
關於資料庫設計,首先就會先提到資料庫正規化
首要目標是使其減少重複,一般來說,行動裝置的本地資料庫不會做到很大一個。通常做到第二或第三標準化即可。這裡只會做一些初階的概念,如果對於正規化有興趣的讀者,可以去搜尋看看。
例如現在有一個資料表如下。
company | product | price | amount | total |
---|---|---|---|---|
甲公司 | A商品, B商品 | 10元, 20元 | 5個, 10個 | 50元, 200元 |
乙公司 | A商品, C商品 | 10元, 30元 | 3個, 15個 | 30元, 450元 |
丙公司 | B商品, C商品 | 20元, 30元 | 4個, 12個 | 80元, 360元 |
首先是第一正規化:同一個欄位中,不能有多個值。
把上面的資料表修正後會變成以下。
company | product | price | amount | total |
---|---|---|---|---|
甲公司 | A商品 | 10元 | 5個 | 50元 |
甲公司 | B商品 | 20元 | 10個 | 200元 |
乙公司 | A商品 | 10元 | 3個 | 30元 |
乙公司 | C商品 | 30元 | 15個 | 450元 |
丙公司 | B商品 | 20元 | 4個 | 80元 |
丙公司 | C商品 | 30元 | 12個 | 360元 |
另外,需要有唯一、不重複的識別碼,稱為 primary key。當有相同內容的時候也能分出兩個的不同。
加上編號
_id | company | product | price | amount | total |
---|---|---|---|---|---|
1 | 甲公司 | A商品 | 10元 | 5個 | 50元 |
2 | 甲公司 | B商品 | 20元 | 10個 | 200元 |
3 | 乙公司 | A商品 | 10元 | 3個 | 30元 |
4 | 乙公司 | C商品 | 30元 | 15個 | 450元 |
5 | 丙公司 | B商品 | 20元 | 4個 | 80元 |
6 | 丙公司 | C商品 | 30元 | 12個 | 360元 |
如果有彼此相依的欄位,可以分開寫,比如這裡的商品和單價,每次寫一次商品就要加上單價,就可以分開成另一個資料表。
product_table:
_id | product | price |
---|---|---|
1 | A商品 | 10元 |
2 | B商品 | 20元 |
3 | C商品 | 30元 |
一樣要有 primary key。
_id | company | product_id | amount | total |
---|---|---|---|---|
1 | 甲公司 | 1 | 5個 | 50元 |
2 | 甲公司 | 2 | 10個 | 200元 |
3 | 乙公司 | 1 | 3個 | 30元 |
4 | 乙公司 | 3 | 15個 | 450元 |
5 | 丙公司 | 2 | 4個 | 80元 |
6 | 丙公司 | 3 | 12個 | 360元 |
再用商品碼連到 product_table 的 _id,而 product_id 對於現在這個資料表來說就是 forign key。
這麼做的原因就是為了存取速度了。